/**
 * 读文件内容  链接文件读取最终指向的文件
 * @param file string|buffer|int 路径 或 文件描述符
 * @param opt json|null 选项
 * 		enc: string 返回编码  utf8(默认)|base64|buffer
 * 		ign: boolean 不存在是否忽略异常 默认false:抛出
 * 		syn: boolean 是否同步操作  默认false:异步
 * @return Promise|string|buffer|null !opt.syn->Promise
 * 		string|buffer:根据enc,  null:不存在且ign
 */
$.fsRead = function(file, opt=null){
	const DEF = {enc:'utf8', ign:false, syn:false};
	const $FS=require('node:fs'), ERR=(e,o)=>{
		let x = e.code==='ENOENT' || e.code==='ENXIO';
		if(x&&o.ign) return null; $.err('$.fsRead',e);
	};
	$.fsRead = function(file, opt=null){
		opt=$.mix({},DEF,opt); let b=opt.enc==='buffer';
		const opx = {encoding:b?null:opt.enc, flag:'r'};
		if(opt.syn){
			try{ return $FS.readFileSync(file,opx); }
			catch(err){ return ERR(err,opt); }
		}
		return $.fsAsync('readFile',file,opx)
			.catch(err=>ERR(err,opt));
	};
	return $.fsRead(file, opt);
};
